<%@ page import="java.io.*" %>
<%
  // the directory where the uploaded file will be saved.
  String savePath = "C:\\123data\\";

  String filename = "";

  ServletInputStream in = request.getInputStream();

  byte[] line = new byte[128];
  int i = in.readLine(line, 0, 128);
  int boundaryLength = i - 2;
  String boundary = new String(line, 0, boundaryLength); 
  //-2 discards the newline character

  while (i != -1) {
    String newLine = new String(line, 0, i);
    if (newLine.startsWith("Content-Disposition: form-data; name=\"")) {
      String s = new String(line, 0, i-2);
      int pos = s.indexOf("filename=\"");
      if (pos != -1) {
        String filepath = s.substring(pos+10, s.length()-1);
        // Windows browsers include the full path on the client
        // But Linux/Unix and Mac browsers only send the filename
        // test if this is from a Windows browser
        pos = filepath.lastIndexOf("\\");
        if (pos != -1)
          filename = filepath.substring(pos + 1);
        else
          filename = filepath;
      }

      //this is the file content
      i = in.readLine(line, 0, 128);
      i = in.readLine(line, 0, 128);
      // blank line
      i = in.readLine(line, 0, 128);

      ByteArrayOutputStream buffer = new ByteArrayOutputStream();
      newLine = new String(line, 0, i);

      while (i != -1 && !newLine.startsWith(boundary)) {
        // the problem is the last line of the file content
        // contains the new line character.
        // So, we need to check if the current line is
        // the last line.
        buffer.write(line, 0, i);
        i = in.readLine(line, 0, 128);
        newLine = new String(line, 0, i);
      }
      try {
        // save the uploaded file
        RandomAccessFile f = new RandomAccessFile(
          savePath + filename, "rw");
        byte[] bytes = buffer.toByteArray();
        f.write(bytes, 0, bytes.length - 2);
        f.close();
      }
      catch (Exception e) {}
    }
    i = in.readLine(line, 0, 128);

  } // end while
%>